/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package appvideo;

import appvideo.logica.Propietario;
import appvideo.logica.Empleado;
import appvideo.logica.Pelicula;
import appvideo.logica.Producto;
import appvideo.logica.Proveedor;
import appvideo.logica.Tarifa;
import appvideo.logica.Videojuego;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

/**
 *
 * @author JAVA
 */
public class SubMenu_operacionesProductos {
    
    static Date fecha = new Date(); 
    
    public static void altaProducto(Producto producto){
        
            //AKI BASICAMENTE VOY A CREARME EL OBJETO QUE INSERTARE POSTERIORMENTE EN LA BD        
            int opctarifa=0;
            int opcproveedor=0;
            Producto p=null;//uso el polimorfismo
            
            System.out.println("  TARIFAS");
            List<Tarifa> tarifas = Tarifa.visualizarTarifas();//persistencia tarifas en la base de datos me traigo la lista
            List<Proveedor> proveedores = Proveedor.visualizarProveedores();//igual pero en proveedores
            //la mostramos para que el usuario elija
            while(opctarifa>6 || opctarifa<1){   
                    Iterator it = tarifas.iterator();
                    while (it.hasNext()) {
                        Tarifa t = (Tarifa) it.next();
                        System.out.println(t.getId()+"."+t);
                    }
                    opctarifa=ObtenerTeclado.dameEntero("Elige tarifa correcta: ");                
            }                    
            Tarifa t=tarifas.get(opctarifa-1); 
            
            System.out.println("  PROVEEDORES");
            
            while(opcproveedor<1 || opcproveedor>proveedores.size()){ 
                Iterator itp = proveedores.iterator();
                while (itp.hasNext()) {
                    Proveedor prv = (Proveedor) itp.next();
                    System.out.println(prv.getId()+"."+prv.getNombre());
                }
                opcproveedor=ObtenerTeclado.dameEntero("Elige Proveedor correcto: ");
                //mete en tarifa elegida la tarifa seleccionada     
            }
            Proveedor prv=proveedores.get(opcproveedor-1); 

            if(producto instanceof Pelicula){
            //ahora pedimos los datos pertinentes de la pelicula menos la fecha que se guardará automaticamente 
                int codigo=ObtenerTeclado.dameEntero("Introduce codigo:");
                p = new Pelicula(codigo,ObtenerTeclado.dameCadenaCompleta("Introduce nombre:"),prv,fecha,t,ObtenerTeclado.dameCadena("Introduce genero:"),ObtenerTeclado.dameCadena("Introduce formato:"),ObtenerTeclado.dameEntero("Introduce duracion"));            //lo siguiente sería pasarle la pelicula registrada al metodo altaPelicula y que este a su vez llame a otro metodo

                if(p.compruebaCodigo(producto,codigo)){
                    p.insertaProducto();
                    System.out.println(p.toString()+"\nProducto Insertado\n....\n...");
                }
                else{
                    System.out.println("El codigo introducido ya existe");
                }
            }
            else{
                int codigo=ObtenerTeclado.dameEntero("Introduce codigo:");
                p = new Videojuego(codigo,ObtenerTeclado.dameCadenaCompleta("Introduce nombre:"),prv,fecha,t,ObtenerTeclado.dameCadena("Introduce genero:"),ObtenerTeclado.dameCadena("Introduce Plataforma:"));
                if(p.compruebaCodigo(producto,codigo)){
                    p.insertaProducto();
                    System.out.println(p.toString()+"\nProducto Insertado\n....\n...");
                }
                else{
                    System.out.println("El codigo introducido ya existe");
                }
            }        
            
}
    public static void modificarProducto(Producto producto){
        
        int opcmodifica=1;
        //pedimos el nombre del objeto a buscar
        int codigo = ObtenerTeclado.dameEntero("Introduce el codigo de la pelicula a modifcar:");
        //llamamos a la persistencia y volcamos en contenido en p en caso de que exista
        Producto pr;
        pr=producto.buscaProducto(producto,codigo);//castea porque devuelve un producto
        
        if(pr==null){
            System.out.println("El Producto buscado no existe");
        }
        else{                     
            if(producto instanceof Pelicula){
                  Pelicula p = (Pelicula) pr;
                  System.out.println("Esta es la pelicula\n*************************************"+p.toString());
                  do{
                    System.out.println("*************************************");
                    System.out.println("Qué parámetro desea modificar?\n1.Nombre\n2.Tarifa\n3.Genero\n4.Formato\n5.Proveedor\n6.Duracion\n7.Ver datos pelicula\n8.Guardar cambios"); 
                    opcmodifica=ObtenerTeclado.dameEntero("Elige: ");
                    switch(opcmodifica){

                        case 1:
                            p.setNombre(ObtenerTeclado.dameCadenaCompleta("Introduce nuevo nombre: "));                   
                            System.out.println("Dato modificado");
                            break;
                        
                        case 2:
                            int opctarifa=0;

                            List<Tarifa> tarifas = Tarifa.visualizarTarifas();
                            //la mostramos para que el usuario elija
                             while(opctarifa>6 || opctarifa<1){   
                                Iterator it = tarifas.iterator();
                                while (it.hasNext()) {
                                    Tarifa t = (Tarifa) it.next();
                                    System.out.println(t.getId()+"."+t);
                                }
                                opctarifa=ObtenerTeclado.dameEntero("Elige tarifa correcta: ");                
                            }    
                            //mete en tarifa elegida la tarifa seleccionada                       
                            p.setTarifa(tarifas.get(opctarifa-1)); 
                            System.out.println("Dato modificado");
                            break;
                        case 3:        
                            p.setGenero(ObtenerTeclado.dameCadenaCompleta("Introduce nuevo genero: "));                 
                            System.out.println("Dato modificado");
                            break;
                        case 4:
                             p.setFormato(ObtenerTeclado.dameCadenaCompleta("Introduce nuevo Formato: "));                   
                            System.out.println("Dato modificado");
                            break;
                        case 5:
                            int opcproveedor=0;

                            List<Proveedor> proveedores = Proveedor.visualizarProveedores();
                            //la mostramos para que el usuario elija
                            while(opcproveedor<1 || opcproveedor>proveedores.size()){ 
                                Iterator itp = proveedores.iterator();
                                while (itp.hasNext()) {
                                    Proveedor prv = (Proveedor) itp.next();
                                    System.out.println(prv.getId()+"."+prv.getNombre());
                                }
                                opcproveedor=ObtenerTeclado.dameEntero("Elige Proveedor correcto: ");
                                //mete en tarifa elegida la tarifa seleccionada     
                            }
                            //mete en tarifa elegida la tarifa seleccionada                       
                            p.setProveedor(proveedores.get(opcproveedor-1));                                                        
                            System.out.println("...");
                            break;
                        case 6:
                            p.setDuracion(ObtenerTeclado.dameEntero("Introduce nuevo Duracion: "));                   
                            System.out.println("...");
                            break;
                        case 7:
                            System.out.println(p.toString());
                            break;
                        case 8:
                            p.modificaProducto();
                            System.out.println("\nProducto modificado\n....\n...");
                            break;                
                    }
                  }while(opcmodifica!=8); 
            }
            else{
                  Videojuego v = (Videojuego) pr;
                  System.out.println("Esta es el Videojuego\n*************************************"+v.toString());
                  do{
                    System.out.println("*************************************");
                    System.out.println("Qué parámetro desea modificar?\n1.Nombre\n2.Tarifa\n3.Genero\n4.Plataforma\n5.Proveedor\n6.Ver datos videojuego\n7.Guardar cambios"); 
                    opcmodifica=ObtenerTeclado.dameEntero("Elige: ");
                    switch(opcmodifica){

                        case 1:
                            v.setNombre(ObtenerTeclado.dameCadenaCompleta("Introduce nuevo nombre: "));                   
                            System.out.println("...");
                            break;
                        
                        case 2:
                            int opctarifa=0;

                            List<Tarifa> tarifas = Tarifa.visualizarTarifas();
                            //la mostramos para que el usuario elija
                             while(opctarifa>6 || opctarifa<1){   
                                Iterator it = tarifas.iterator();
                                while (it.hasNext()) {
                                    Tarifa t = (Tarifa) it.next();
                                    System.out.println(t.getId()+"."+t);
                                }
                                opctarifa=ObtenerTeclado.dameEntero("Elige tarifa correcta: ");                
                            }    
                            //mete en tarifa elegida la tarifa seleccionada                       
                            v.setTarifa(tarifas.get(opctarifa-1)); 
                            System.out.println("Dato modificado");
                            break;
                        case 3:        
                            v.setGenero(ObtenerTeclado.dameCadenaCompleta("Introduce nuevo genero: "));                 
                            System.out.println("...");
                            break;
                        case 4:
                            v.setPlataforma(ObtenerTeclado.dameCadenaCompleta("Introduce nueva Plataforma: "));                   
                            System.out.println("...");
                            break;
                        case 5:
                            int opcproveedor=0;

                            List<Proveedor> proveedores = Proveedor.visualizarProveedores();
                            //la mostramos para que el usuario elija
                            while(opcproveedor<1 || opcproveedor>proveedores.size()){ 
                                Iterator itp = proveedores.iterator();
                                while (itp.hasNext()) {
                                    Proveedor prv = (Proveedor) itp.next();
                                    System.out.println(prv.getId()+"."+prv.getNombre());
                                }
                                opcproveedor=ObtenerTeclado.dameEntero("Elige Proveedor correcto: ");
                                //mete en tarifa elegida la tarifa seleccionada     
                            }
                            //mete en tarifa elegida la tarifa seleccionada                       
                            v.setProveedor(proveedores.get(opcproveedor-1));                                                        
                            System.out.println("...");
                        case 6:
                            System.out.println(v.toString());
                            break;
                        case 7:
                            v.modificaProducto();
                            System.out.println("\nProducto modificado\n....\n...");
                            break;                
                    }
                  }while(opcmodifica!=7);
            }
        }     
}
    public static void visualizarProductos(Producto producto){
        
        List<Producto> productos=new ArrayList();
        Producto pr=producto;
        //Ir a la base de datos a por la lista de empleados.
        System.out.println("Bases de datos devolviendo todos los productos del videoclub");
        productos=pr.visualizarProductos();//deberia de llevar un parametro pero luego uso el this
        if(main.usuarioActual instanceof Propietario || main.usuarioActual instanceof Empleado){
            for(Producto p: productos){
                System.out.println(p.toString()+"\n*************************************");
            }
        }
        else{
            for(Producto p: productos){
                System.out.println(p.toStringSocio()+"\n*************************************");
            }
        }
        System.out.println("\n....\n...");
}
    public static void bajaProducto(Producto producto){       
        
        Producto p;
        int codigo = ObtenerTeclado.dameEntero("Introduce el codigo del producto a dar de baja:");
        //llamamos a la persistencia y volcamos en contenido en p en caso de que exista
        p=producto.buscaProducto(producto,codigo);
        if(p==null){
            System.out.println("*************************************El Producto buscado no existe*************************************");
        }
        else{
            System.out.println("Encontrada:\n*************************************"+p.toString()+"\n*************************************");        
            int opcion = ObtenerTeclado.dameEntero("Estas seguro de borrar la pelicula\n1.si\n2.no");
            if(opcion==1){
                p.bajaProducto();
            }
        }
        System.out.println("Producto borrado.\n....\n...");
    
}
    public static void buscarProductos(Producto producto){
        
        //pedimos el nombre del objeto a buscar
        int codigo = ObtenerTeclado.dameEntero("Introduce el codigo del producto a dar de baja:");
        //llamamos a la persistencia y volcamos en contenido en p en caso de que exista                       
        Producto pr=producto.buscaProducto(producto,codigo);        
        if(pr==null){
            System.out.println("*************************************El Producto buscado no existe*************************************");
        }
        else{
             if(main.usuarioActual instanceof Propietario || main.usuarioActual instanceof Empleado){            
                System.out.println("Encontrada:\n*************************************"+pr.toString()+"\n*************************************");
            }
            else{           
                System.out.println("Encontrada:\n*************************************"+pr.toStringSocio()+"\n*************************************");
            }
        }
        System.out.println("\n....\n...");
}

}
